package com.bw.util;

import lombok.SneakyThrows;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.Base64;
import java.util.List;


public class UploadUtil {

    //图片上传
    public static  String  uploadImage(HttpServletRequest req, HttpServletResponse resp) {
        // 1. 创建 DiskFileItemFactory 对象, 用于构建一个解析上传数据的工具对象
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory ();
        //3. 创建一个解析上传数据的工具对象
        ServletFileUpload servletFileUpload = new ServletFileUpload (diskFileItemFactory);
        //解决接收到文件名是中文乱码问题
        servletFileUpload.setHeaderEncoding("utf-8");
        //4. [关键的地方] servletFileUpload 对象可以把表单提交的数据text / 文件
        //   将其封装到 FileItem 文件项中
        try {
            List<FileItem> list = servletFileUpload.parseRequest(req);
            //遍历，并分别处理
            for (FileItem fileItem : list) {
                //判断是不是一个文本类型  isFormField
                if (fileItem.isFormField()) {//如果是true就是文本 input -> text
                    String name = fileItem.getString("utf-8");
                } else {//否则就是一个文件file

                    //获取上传的文件的名字
                    String name = fileItem.getName();
                    System.out.println("上传的文件名=" + name);

                    //把这个要上传到服务器下的文件， 保存到你指定的目录
                    String fileRealPath = "C:/image/";
                    //System.out.println("fileRealPath= " + fileRealPath);

                    //3. 创建这个上传的目录=> 创建目录
                    File fileRealPathDirectory = new File(fileRealPath);
                    if (!fileRealPathDirectory.exists()) {//不存在，就创建
                        fileRealPathDirectory.mkdirs();//创建
                    }
                    //4. 将文件拷贝到fileRealPathDirectory目录
                    //   构建一个上传文件的完整路径 ：目录 + 文件名
                    //   对上传的文件名进行处理, 前面增加一个前缀，保证是唯一，这样在读取过程中不会出错
                    //36758607-f308-4a9a-a40f-53d8c65c4e18_1714796441914_24.4月.png
                    //name = UUID.randomUUID().toString() + "_" + System.currentTimeMillis() + "_" + name;
                    //1714798595049_桌面1.jpg
                    name = System.currentTimeMillis() + "_" + name;
                    fileRealPath += "/"+name;

                    fileItem.write(new File(fileRealPath));
                    System.out.println("图片完整路径: " + fileRealPath);

                    //5. 设置编码格式，防止乱码
                    resp.setContentType("text/html;charset=utf-8");
                    return fileRealPath;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return  null;
    }


    //图片的读取
    public static void showImg(String path, HttpServletResponse response){

        if(path!=null&&!path.equals("")){

            FileInputStream fis = null;
            ServletOutputStream os = null;
            try {
                fis = new FileInputStream(path);
                os = response.getOutputStream();

                byte [] b = new byte[1024*8];
                while(fis.read(b)!=-1){
                    os.write(b);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }


}
